package com.kotlin.lib

open class AA
open class BB : AA()
val forceAdd = fun Int.(other: Int): Int = other + this
fun BB.method() = print("extensionBBMethod")
fun print(obj: AA) {
    obj.method()
}

//扩展方法是静态指向的。不具备多态性
fun AA.method() = print("extensionAAMethod")


fun main() {
    val student = Student("hawking", "", 12, "beijing")
    println(student)

    val bb = BB()
    print(bb)

    /**
     * 带接受者的函数字面值
     *
     * kotlin提供了这样一种功能：可以通过指定的接受者对象来调用一个函数字面值。
     * 在函数字面值内部，你可以调用接受者对象的方法而无需使用任何额外的装饰符。
     * 这点和扩展函数很像
     */

    val method = fun Int.(other: Int): Int = other + this
    println(1.method(2))
}